package main

import (
	"bufio"
	"fmt"
	"os"
)

// io
func demo15() {
	// io.ByteReader()
	demo15_open()
}

func demo15_open() {
	// io包已被官方废弃 推荐使用os包
	f, err := os.OpenFile("./test.txt", os.O_CREATE|os.O_RDWR, 0666)
	if err != nil {
		fmt.Println(err)
	}
	defer f.Close()
	/*
		// 读取指定字符
		for {
			// 表示需要读取的字节数
			b := make([]byte, 12)
			n, err := f.Read(b)
			// f.Write([]byte("1234567890")) 写入
			if err != nil {
				fmt.Println(err)
				break
			}
			//f.Seek(-3, 1) 移动光标
			fmt.Println(n, err, string(b))
		}
	*/

	/*
		// 读取一行或指定字符串切割
		reader := bufio.NewReader(f)
		for {
			str, isPrefix, err := reader.ReadLine()
			//str, err := reader.ReadString('\n')
			if err != nil {
				fmt.Println(err)
				break
			}
			fmt.Println(string(str), isPrefix)
		}
	*/

	/*
		// 读取全部
		str, err := ioutil.ReadAll(f)
		fmt.Println(string(str))
	*/
	fmt.Println("*********************")

	/*
		// 读取全部
		str, err := os.ReadFile("./test.txt")
		fmt.Println(string(str))
	*/

	/*
		// 读取文件夹
		d, err := os.ReadDir("./")
		for _, v := range d {
			fmt.Println(v.Name())
			fmt.Println(v.IsDir())
			fmt.Println(v.Type())
			// 获取文件大小
			vv, err := v.Info()
			if err != nil {
				fmt.Println(err)
			}
			fmt.Println(vv.Size())
			//fmt.Println(v.Size())
		}
	*/
	//fmt.Println(f, err)

	// 边读边写
	reader := bufio.NewReader(f)
	write := bufio.NewWriter(f)
	for {
		str, err := reader.ReadString('\n')
		write.WriteString("1 " + str)
		//write.Write([]byte("1 " + str))
		if err != nil {
			fmt.Println(err)
			break
		}
		fmt.Println(str)
		// f.Seek()
	}
	f.Seek(0, 0)
	write.Flush()
}
